/**
微信小程序的登录流程主要包括获取用户的身份信息、获取用户的登录凭证以及使用后端接口进行验证。
  1. 获取用户的登录凭证
  在小程序中，用户登录的第一步是调用  `wx.login`  方法，这个方法会向微信服务器请求用户的登录凭证（code）。

  示例代码：
  wx.login({
    success: function(res) {
      if (res.code) {
        // 发送 res.code 到后台服务器进行登录
        console.log('用户登录凭证：', res.code);
      } else {
        console.log('登录失败：' + res.errMsg);
      }
    }
  });
  2. 将登录凭证发送到服务器

  获取到用户的  `code`  后，需要将其发送到自己的服务器进行进一步处理。服务器会使用这个  `code`  向微信服务器请求用户的 session_key 和 openid。

  示例代码：
  // 假设使用了一个 HTTP 请求库
  const loginCode = res.code; // 从 wx.login 获取的 code
  wx.request({
    url: 'https://your-server.com/api/login', // 替换为你的服务器地址
    method: 'POST',
    data: {
      code: loginCode
    },
    success: function(response) {
      // 处理服务器返回的 session_key 和 openid
      console.log('登录成功，用户信息：', response.data);
    }
  });
  3. 服务器端验证

  在服务器端，使用接收到的  `code`  调用微信的接口，获取  `session_key`  和  `openid` 。可以使用以下接口：
  https://api.weixin.qq.com/sns/jscode2session?appid=YOUR_APPID&secret=YOUR_SECRET&js_code=CODE&grant_type=authorization_code
  -  `YOUR_APPID` ：小程序的 App ID。
  -  `YOUR_SECRET` ：小程序的 App Secret。
  -  `CODE` ：从  `wx.login`  获取的 code。

  4. 保存用户信息

  成功获取到  `session_key`  和  `openid`  后，可以将这些信息存储在服务器上，以便后续的用户身份验证和管理。同时，可以生成用户的 token 以用于后续 API 的调用。

  5. 处理用户信息

  如果需要获取用户的详细信息（如昵称、头像等），可以在用户同意授权后使用  `wx.getUserProfile`  或  `wx.getUserInfo`  方法。

  示例代码：
  wx.getUserProfile({
    desc: '用于完善会员资料',
    success: function(res) {
      console.log('用户信息：', res.userInfo);
    }
  });
  6. 总结

  微信小程序的登录流程主要包括获取用户的登录凭证、将凭证发送到服务器进行验证、获取用户的  `session_key`  和  `openid` ，以及处理用户信息。通过这个流程，开发者可以实现用户的身份验证和信息管理。在实现过程中，需要注意用户的隐私和数据安全，确保遵循相关法律法规。
 */
// pages/12_learn_login/index.js
import { getCode } from "../../service/login";
import { askLoginServiceInstance } from "../../service/index"

Page({
  // onLoad登录的流程
  async onLoad() {
    // 1.获取token, 判断token是否有值
    const token = wx.getStorageSync('token') || ""

    // 2. 判断token是否过期
    const res = await askLoginServiceInstance.post({
      url: '/auth',
      hander: {
        token: token
      }
    })

    // 2.如果token有值
    if (token && res.message === "已登录") {
      console.log("请求其他的数据");
    } else {
      this.handleLogin()
    }
  },

  async handleLogin() {
    // 1.获取code
    const code = await getCode()

    // 2.使用code换取token
    const res = await askLoginServiceInstance.post({
      url: '/login',
      data: {code}
    })

    // 3. 保存token
    wx.setStorageSync('token', res.token)
  }
})